import Vue from 'vue'
import VueRouter from 'vue-router'
// 导入全部 导出是用按需导出的，要一次性全导出来,得到的是一个对象，进行别名
import * as hooks from './hooks'

// 解析vue-router中间版本，在守卫时跳转有警告问题，但是在低一些版本或高版本中就没有问题
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location, onResolve, onReject) {
  if (onResolve || onReject) return originalPush.call(this, location, onResolve, onReject)
  return originalPush.call(this, location).catch(err => err)
}

Vue.use(VueRouter)

// 参数1：你需要检索的目录  相对路径
// 参数2：检索的目录是否需要递归检索 true/false
// 参数3：指定检查返回的文件类型 正则
const moduleFn = require.context('./routes', false, /\.js$/i)
const routes = moduleFn.keys().reduce((prev, curr) => {
  let route = moduleFn(curr).default
  if (Array.isArray(route)) {
    prev.push(...route)
  } else {
    prev.push(route)
  }
  return prev
}, [])

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})

// 导航守卫
Object.keys(hooks).forEach(key => router.beforeEach(hooks[key]))

export default router
